package araujoCoronelVillamayor.plantasVsZombies.appModelsArena;

import araujoCoronelVillamayor.plantasVsZombies.appModelsArena.AtaqueAppModel;
import araujoCoronelVillamayor.plantasVsZombies.appModelsArena.JardinZenAppModel;
import araujoCoronelVillamayor.plantasVsZombies.domain.FactoryMejoras;
import araujoCoronelVillamayor.plantasVsZombies.domain.FactoryPlantas;
import araujoCoronelVillamayor.plantasVsZombies.domain.FactoryZombies;
import araujoCoronelVillamayor.plantasVsZombies.domain.Fila;
import araujoCoronelVillamayor.plantasVsZombies.domain.Jardin;
import araujoCoronelVillamayor.plantasVsZombies.domain.JardinZen;
import araujoCoronelVillamayor.plantasVsZombies.domain.Mejora;
import araujoCoronelVillamayor.plantasVsZombies.domain.Planta;
import araujoCoronelVillamayor.plantasVsZombies.domain.Zombie;
import com.google.common.base.Objects;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.uqbar.commons.model.UserException;
import org.uqbar.commons.utils.Observable;

@Observable
@SuppressWarnings("all")
public class SesionAppModel implements Serializable {
  private Jardin _jardin;
  
  public Jardin getJardin() {
    return this._jardin;
  }
  
  public void setJardin(final Jardin jardin) {
    this._jardin = jardin;
  }
  
  private JardinZen _jardinZen;
  
  public JardinZen getJardinZen() {
    return this._jardinZen;
  }
  
  public void setJardinZen(final JardinZen jardinZen) {
    this._jardinZen = jardinZen;
  }
  
  private int _recursos;
  
  public int getRecursos() {
    return this._recursos;
  }
  
  public void setRecursos(final int recursos) {
    this._recursos = recursos;
  }
  
  private FactoryPlantas _factoryPlantas;
  
  public FactoryPlantas getFactoryPlantas() {
    return this._factoryPlantas;
  }
  
  public void setFactoryPlantas(final FactoryPlantas factoryPlantas) {
    this._factoryPlantas = factoryPlantas;
  }
  
  private FactoryZombies _factoryZombies;
  
  public FactoryZombies getFactoryZombies() {
    return this._factoryZombies;
  }
  
  public void setFactoryZombies(final FactoryZombies factoryZombies) {
    this._factoryZombies = factoryZombies;
  }
  
  private FactoryMejoras _factoryMejoras;
  
  public FactoryMejoras getFactoryMejoras() {
    return this._factoryMejoras;
  }
  
  public void setFactoryMejoras(final FactoryMejoras factoryMejoras) {
    this._factoryMejoras = factoryMejoras;
  }
  
  private List<Mejora> _tiposMejoras;
  
  public List<Mejora> getTiposMejoras() {
    return this._tiposMejoras;
  }
  
  public void setTiposMejoras(final List<Mejora> tiposMejoras) {
    this._tiposMejoras = tiposMejoras;
  }
  
  private String _nombreJugador;
  
  public String getNombreJugador() {
    return this._nombreJugador;
  }
  
  public void setNombreJugador(final String nombreJugador) {
    this._nombreJugador = nombreJugador;
  }
  
  private Fila _filaSeleccionada;
  
  public Fila getFilaSeleccionada() {
    return this._filaSeleccionada;
  }
  
  public void setFilaSeleccionada(final Fila filaSeleccionada) {
    this._filaSeleccionada = filaSeleccionada;
  }
  
  private Zombie _zombieSeleccionado;
  
  public Zombie getZombieSeleccionado() {
    return this._zombieSeleccionado;
  }
  
  public void setZombieSeleccionado(final Zombie zombieSeleccionado) {
    this._zombieSeleccionado = zombieSeleccionado;
  }
  
  private Planta _plantaSeleccionada;
  
  public Planta getPlantaSeleccionada() {
    return this._plantaSeleccionada;
  }
  
  public void setPlantaSeleccionada(final Planta plantaSeleccionada) {
    this._plantaSeleccionada = plantaSeleccionada;
  }
  
  private List<Fila> _resultados;
  
  public List<Fila> getResultados() {
    return this._resultados;
  }
  
  public void setResultados(final List<Fila> resultados) {
    this._resultados = resultados;
  }
  
  private AtaqueAppModel _ataqueAppModel;
  
  public AtaqueAppModel getAtaqueAppModel() {
    return this._ataqueAppModel;
  }
  
  public void setAtaqueAppModel(final AtaqueAppModel ataqueAppModel) {
    this._ataqueAppModel = ataqueAppModel;
  }
  
  private JardinZenAppModel _jardinZenAppModel;
  
  public JardinZenAppModel getJardinZenAppModel() {
    return this._jardinZenAppModel;
  }
  
  public void setJardinZenAppModel(final JardinZenAppModel jardinZenAppModel) {
    this._jardinZenAppModel = jardinZenAppModel;
  }
  
  private Fila _filaSeleccionadaRefresh;
  
  public Fila getFilaSeleccionadaRefresh() {
    return this._filaSeleccionadaRefresh;
  }
  
  public void setFilaSeleccionadaRefresh(final Fila filaSeleccionadaRefresh) {
    this._filaSeleccionadaRefresh = filaSeleccionadaRefresh;
  }
  
  public SesionAppModel() {
    AtaqueAppModel _ataqueAppModel = new AtaqueAppModel(this);
    this.setAtaqueAppModel(_ataqueAppModel);
    JardinZenAppModel _jardinZenAppModel = new JardinZenAppModel(this);
    this.setJardinZenAppModel(_jardinZenAppModel);
    JardinZenAppModel _jardinZenAppModel_1 = this.getJardinZenAppModel();
    JardinZen _jardinZen = _jardinZenAppModel_1.getJardinZen();
    this.setJardinZen(_jardinZen);
    Jardin _jardin = new Jardin();
    this.setJardin(_jardin);
    Jardin _jardin_1 = this.getJardin();
    JardinZen _jardinZen_1 = this.getJardinZen();
    Fila _fila = new Fila("Acuatica", _jardinZen_1);
    _jardin_1.agregarFila(_fila);
    Jardin _jardin_2 = this.getJardin();
    JardinZen _jardinZen_2 = this.getJardinZen();
    Fila _fila_1 = new Fila("Acuatica", _jardinZen_2);
    _jardin_2.agregarFila(_fila_1);
    Jardin _jardin_3 = this.getJardin();
    JardinZen _jardinZen_3 = this.getJardinZen();
    Fila _fila_2 = new Fila("Acuatica", _jardinZen_3);
    _jardin_3.agregarFila(_fila_2);
    Jardin _jardin_4 = this.getJardin();
    JardinZen _jardinZen_4 = this.getJardinZen();
    Fila _fila_3 = new Fila("Terrestre", _jardinZen_4);
    _jardin_4.agregarFila(_fila_3);
    Jardin _jardin_5 = this.getJardin();
    JardinZen _jardinZen_5 = this.getJardinZen();
    Fila _fila_4 = new Fila("Terrestre", _jardinZen_5);
    _jardin_5.agregarFila(_fila_4);
    Jardin _jardin_6 = this.getJardin();
    JardinZen _jardinZen_6 = this.getJardinZen();
    Fila _fila_5 = new Fila("Terrestre", _jardinZen_6);
    _jardin_6.agregarFila(_fila_5);
    FactoryPlantas _instance = FactoryPlantas.getInstance();
    this.setFactoryPlantas(_instance);
    FactoryZombies _instance_1 = FactoryZombies.getInstance();
    this.setFactoryZombies(_instance_1);
    FactoryMejoras _instance_2 = FactoryMejoras.getInstance();
    this.setFactoryMejoras(_instance_2);
    this.setRecursos(1000);
    this.setNombreJugador("Juan");
    ArrayList<Mejora> _arrayList = new ArrayList<Mejora>();
    this.setTiposMejoras(_arrayList);
    List<Mejora> _tiposMejoras = this.getTiposMejoras();
    FactoryMejoras _factoryMejoras = this.getFactoryMejoras();
    Mejora _crearMejoraCrystal = _factoryMejoras.crearMejoraCrystal();
    _tiposMejoras.add(_crearMejoraCrystal);
    List<Mejora> _tiposMejoras_1 = this.getTiposMejoras();
    FactoryMejoras _factoryMejoras_1 = this.getFactoryMejoras();
    Mejora _crearMejoraGold = _factoryMejoras_1.crearMejoraGold();
    _tiposMejoras_1.add(_crearMejoraGold);
    List<Mejora> _tiposMejoras_2 = this.getTiposMejoras();
    FactoryMejoras _factoryMejoras_2 = this.getFactoryMejoras();
    Mejora _crearMejoraSilver = _factoryMejoras_2.crearMejoraSilver();
    _tiposMejoras_2.add(_crearMejoraSilver);
    JardinZen _jardinZen_7 = this.getJardinZen();
    FactoryPlantas _factoryPlantas = this.getFactoryPlantas();
    Planta _crearShooter = _factoryPlantas.crearShooter();
    _jardinZen_7.agregarPlanta(_crearShooter);
    JardinZen _jardinZen_8 = this.getJardinZen();
    FactoryPlantas _factoryPlantas_1 = this.getFactoryPlantas();
    Planta _crearGirasol = _factoryPlantas_1.crearGirasol();
    _jardinZen_8.agregarPlanta(_crearGirasol);
    JardinZen _jardinZen_9 = this.getJardinZen();
    FactoryPlantas _factoryPlantas_2 = this.getFactoryPlantas();
    Planta _crearPirana = _factoryPlantas_2.crearPirana();
    _jardinZen_9.agregarPlanta(_crearPirana);
    Jardin _jardin_7 = this.getJardin();
    FactoryPlantas _factoryPlantas_3 = this.getFactoryPlantas();
    Planta _crearShooter_1 = _factoryPlantas_3.crearShooter();
    Jardin _jardin_8 = this.getJardin();
    ArrayList<Fila> _filas = _jardin_8.getFilas();
    Fila _get = _filas.get(0);
    _jardin_7.agregarPlanta(_crearShooter_1, _get);
    Jardin _jardin_9 = this.getJardin();
    FactoryPlantas _factoryPlantas_4 = this.getFactoryPlantas();
    Planta _crearShooter_2 = _factoryPlantas_4.crearShooter();
    Jardin _jardin_10 = this.getJardin();
    ArrayList<Fila> _filas_1 = _jardin_10.getFilas();
    Fila _get_1 = _filas_1.get(0);
    _jardin_9.agregarPlanta(_crearShooter_2, _get_1);
    Jardin _jardin_11 = this.getJardin();
    FactoryPlantas _factoryPlantas_5 = this.getFactoryPlantas();
    Planta _crearShooter_3 = _factoryPlantas_5.crearShooter();
    Jardin _jardin_12 = this.getJardin();
    ArrayList<Fila> _filas_2 = _jardin_12.getFilas();
    Fila _get_2 = _filas_2.get(0);
    _jardin_11.agregarPlanta(_crearShooter_3, _get_2);
    Jardin _jardin_13 = this.getJardin();
    FactoryPlantas _factoryPlantas_6 = this.getFactoryPlantas();
    Planta _crearShooter_4 = _factoryPlantas_6.crearShooter();
    Jardin _jardin_14 = this.getJardin();
    ArrayList<Fila> _filas_3 = _jardin_14.getFilas();
    Fila _get_3 = _filas_3.get(1);
    _jardin_13.agregarPlanta(_crearShooter_4, _get_3);
    Jardin _jardin_15 = this.getJardin();
    FactoryPlantas _factoryPlantas_7 = this.getFactoryPlantas();
    Planta _crearShooter_5 = _factoryPlantas_7.crearShooter();
    Jardin _jardin_16 = this.getJardin();
    ArrayList<Fila> _filas_4 = _jardin_16.getFilas();
    Fila _get_4 = _filas_4.get(1);
    _jardin_15.agregarPlanta(_crearShooter_5, _get_4);
    Jardin _jardin_17 = this.getJardin();
    FactoryPlantas _factoryPlantas_8 = this.getFactoryPlantas();
    Planta _crearGirasol_1 = _factoryPlantas_8.crearGirasol();
    Jardin _jardin_18 = this.getJardin();
    ArrayList<Fila> _filas_5 = _jardin_18.getFilas();
    Fila _get_5 = _filas_5.get(3);
    _jardin_17.agregarPlanta(_crearGirasol_1, _get_5);
    Jardin _jardin_19 = this.getJardin();
    FactoryPlantas _factoryPlantas_9 = this.getFactoryPlantas();
    Planta _crearPirana_1 = _factoryPlantas_9.crearPirana();
    Jardin _jardin_20 = this.getJardin();
    ArrayList<Fila> _filas_6 = _jardin_20.getFilas();
    Fila _get_6 = _filas_6.get(3);
    _jardin_19.agregarPlanta(_crearPirana_1, _get_6);
    Jardin _jardin_21 = this.getJardin();
    FactoryPlantas _factoryPlantas_10 = this.getFactoryPlantas();
    Planta _crearGirasol_2 = _factoryPlantas_10.crearGirasol();
    Jardin _jardin_22 = this.getJardin();
    ArrayList<Fila> _filas_7 = _jardin_22.getFilas();
    Fila _get_7 = _filas_7.get(3);
    _jardin_21.agregarPlanta(_crearGirasol_2, _get_7);
    Jardin _jardin_23 = this.getJardin();
    FactoryPlantas _factoryPlantas_11 = this.getFactoryPlantas();
    Planta _crearGirasol_3 = _factoryPlantas_11.crearGirasol();
    Jardin _jardin_24 = this.getJardin();
    ArrayList<Fila> _filas_8 = _jardin_24.getFilas();
    Fila _get_8 = _filas_8.get(4);
    _jardin_23.agregarPlanta(_crearGirasol_3, _get_8);
    Jardin _jardin_25 = this.getJardin();
    FactoryPlantas _factoryPlantas_12 = this.getFactoryPlantas();
    Planta _crearPirana_2 = _factoryPlantas_12.crearPirana();
    Jardin _jardin_26 = this.getJardin();
    ArrayList<Fila> _filas_9 = _jardin_26.getFilas();
    Fila _get_9 = _filas_9.get(4);
    _jardin_25.agregarPlanta(_crearPirana_2, _get_9);
    Jardin _jardin_27 = this.getJardin();
    FactoryPlantas _factoryPlantas_13 = this.getFactoryPlantas();
    Planta _crearGirasol_4 = _factoryPlantas_13.crearGirasol();
    Jardin _jardin_28 = this.getJardin();
    ArrayList<Fila> _filas_10 = _jardin_28.getFilas();
    Fila _get_10 = _filas_10.get(5);
    _jardin_27.agregarPlanta(_crearGirasol_4, _get_10);
  }
  
  public void poner() {
    Planta _plantaSeleccionada = this.getPlantaSeleccionada();
    boolean _notEquals = (!Objects.equal(_plantaSeleccionada, null));
    if (_notEquals) {
      Planta _plantaSeleccionada_1 = this.getPlantaSeleccionada();
      String _nombre = _plantaSeleccionada_1.getNombre();
      Planta _plantaSeleccionada_2 = this.getPlantaSeleccionada();
      int _ataque = _plantaSeleccionada_2.getAtaque();
      Planta _plantaSeleccionada_3 = this.getPlantaSeleccionada();
      int _defensa = _plantaSeleccionada_3.getDefensa();
      Planta _plantaSeleccionada_4 = this.getPlantaSeleccionada();
      String _tipo = _plantaSeleccionada_4.getTipo();
      Planta _planta = new Planta(_nombre, _ataque, _defensa, _tipo);
      final Planta nuevaPlanta = _planta;
      Jardin _jardin = this.getJardin();
      Fila _filaSeleccionada = this.getFilaSeleccionada();
      _jardin.agregarPlanta(nuevaPlanta, _filaSeleccionada);
    } else {
      UserException _userException = new UserException("No hay una planta seleccionada.");
      throw _userException;
    }
  }
  
  public void refresh() {
    Fila _filaSeleccionada = this.getFilaSeleccionada();
    this.setFilaSeleccionadaRefresh(_filaSeleccionada);
    ArrayList<Fila> _arrayList = new ArrayList<Fila>();
    this.setResultados(_arrayList);
    Jardin _jardin = this.getJardin();
    ArrayList<Fila> _filas = _jardin.getFilas();
    this.setResultados(_filas);
    int _recursos = this.getRecursos();
    this.setRecursos(_recursos);
    Fila _filaSeleccionadaRefresh = this.getFilaSeleccionadaRefresh();
    this.setFilaSeleccionada(_filaSeleccionadaRefresh);
  }
  
  public void agregarRecursos(final int puntos) {
    int _recursos = this.getRecursos();
    int _plus = (_recursos + puntos);
    this.setRecursos(_plus);
  }
  
  public void quitarRecursos(final int puntos) {
    int _recursos = this.getRecursos();
    int _minus = (_recursos - puntos);
    this.setRecursos(_minus);
  }
  
  public boolean filaSeleccionadaNoVacia() {
    boolean _xifexpression = false;
    Fila _filaSeleccionada = this.getFilaSeleccionada();
    boolean _estoyVacia = _filaSeleccionada.estoyVacia();
    if (_estoyVacia) {
      UserException _userException = new UserException("La fila est\u00E1 vac\u00EDa...no puedes atacar a alguien indefenso, cobarde :P");
      throw _userException;
    } else {
      _xifexpression = true;
    }
    return _xifexpression;
  }
}
